<?php
/**
 * Created by PhpStorm.
 * User: Happy
 * Date: 2016/6/17 0017
 * Time: 19:15
 */

//ignore_user_abort(TRUE);//如果客户端断开连接，不会引起脚本abort
set_time_limit(0);//取消脚本执行延时上限 ,可以一直执行

function get_config(){
    static $config;
    if($config){
        return $config;
    }
    else{
        $base_dir=dirname( __FILE__);
        $plugin_dir=dirname($base_dir);
        $config_path=$plugin_dir.'/timer_config.php';
        $config=include($config_path);
    }

    return $config;
}

//curl通知 ,不等待结果，立刻返回
function notify($url){
    $ch = curl_init();
    $curl_opt = array(CURLOPT_URL, $url,
        CURLOPT_RETURNTRANSFER, 1,
        CURLOPT_TIMEOUT, 1,);
    curl_setopt_array($ch, $curl_opt);
    curl_exec($ch);
    curl_close($ch);
}

//定时轮询，触发指定url的程序，另外一个进程
function start(){
    echo  'task start';
    $base_dir=dirname( __FILE__);
    $file_path=$base_dir.'/lock.txt';
    if(file_exists($file_path)){exit();} //说明已经存在了
    file_put_contents($file_path,'running2');  //代表已经启动循环进程

      $config=get_config();
     $default_time=$config['time'];
     $notify_url=$config['notify_url'];

    $not_exit=true;
    while($not_exit){
        echo  chr(10).'wait time'.$default_time;
        sleep($default_time);
     $get=trim(file_get_contents($notify_url.'&url='.urlencode($notify_url)));
        echo  chr(10).'exec result:'.var_export($get,true);
        if(!$get){$get="{}";}
        $first=substr($get,0,1);
        if($first=='{'||$first=='['){
        $result=json_decode($get,true);
        if(isset($result['time'])){  //在php中设置下次通知时间
            $default_time=$result['time'];
        }
        if(isset($result['exit'])){
            $not_exit=false;
        }
        if(isset($result['notify_url'])) {
            $notify_url = $result['notify_url'];
        }
        else{
            $not_exit=false;
        }
        }else{ //说明执行出错了


          file_put_contents('sync_error.log',$get);//,FILE_APPEND
             //程序运行引起fatal error
            //通知error_Url
           // echo $get;
         //   echo chr(10).'run error will exit in 5 seconds';
          //  sleep(3);//暂停3秒退出
          exit();//直接退出

        }

    }
  //  echo chr(10).'run success, will exit in 2 seconds';
   // sleep(2);//暂停3秒退出
}


//结束删除运行标识
register_shutdown_function(function()
{
   $config=get_config();
    $error_notify=$config['error_notify'];
   $n= stristr($error_notify,'?')?'':'?';
    $e = error_get_last();
    // $var= exec('php c.php',$out);
    $e= var_export($e,true);
    $e=substr($e,0,200);//最多两百个字符
    if($error_notify){
        file_get_contents($error_notify.$n.'&error='.$e);//通知错误处理
    }
    $base_dir=dirname( __FILE__);
    $file_path= $base_dir.'/close.php';
    system('php '.$file_path);
     //$file_path= $base_dir.'/c.php';
    //system('php '.$file_path);
    //pclose(popen("php c.php &", 'r'));
    //$info=file_get_contents('c.php?log=b');
    // file_put_contents('a.log','ssdd');
    // file_put_contents('sync.txt',var_export($e,true),FILE_APPEND);
    // file_put_contents('sync.txt','source code:'.$detail,FILE_APPEND);
    //记录错误信息
    print_r($e);
});

start();